tg-me.com/golang_for_two/41
Last Update:
Note # 17 Скомпилируется или нет? Или игра с ссылками.
Есть пример программы, которая скорее всего не скомпилируется?! :)Program:
package main
import (
"fmt"
)
var g *int
func f(p *****int) { g = ****p }
func main() {
var i int
j := &i
k := &j
l := &k
m := &l
f(&m)
fmt.Printf("%T\n", &m)
fmt.Printf("%T", f)
}
Итак перед тем как копировать код и запускать на play.golang.org, я решил немного освежить как же работают ссылки в Go. Есть небольшой пример:
func main() {
var i = 42
var j = &i
fmt.Println("i = ", i)
fmt.Println("j = ", j)
fmt.Println("*j = ", *j)
}
Думаю тут все и так понятно:
// Output
i = 100
j = 0xc0000160b8
*j = 100
Проблема лишь в том, что пока, я не приблизились к нашему первоначальному примеру ни на шаг.
И тут я вспомнил, то факт, что ссылка, может ссылаться на любой тип, в том числе, и быть ссылкой на ссылку, т.е. можно написать
**p
(dereferencing a pointer to pointer).func main() {
var i = 42
var p = &i
var pp = &p
fmt.Println("pp = ", pp)
// Dereferencing a pointer to pointer
fmt.Println("*pp = ", *pp)
fmt.Println("**pp = ", **pp)
}
pp = 0xc0000bc010
*pp = 0xc0000c2000
**pp = 42
P.S. я думаю теперь вы догадались, какой правильный ответ.
Goto Program
BY 🇺🇦 Go for two :)
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/golang_for_two/41